/*
 * ApplicationBean.java
 * Created on 16 juil. 2008, 10:32:36
 * @author Rivo
 */
package gla.centralhotel.uiweb;

import com.sun.rave.web.ui.appbase.AbstractApplicationBean;
import com.sun.webui.jsf.model.Option;
import javax.faces.FacesException;
import javax.ejb.EJB;
import gla.centralhotel.business.interfaces.IResourceBrowser;
import gla.centralhotel.model.Country;
import gla.centralhotel.model.RoomType;
import gla.centralhotel.model.Zipcode;
import java.util.ArrayList;

/**
 * <p>Application scope data bean for your application.  Create properties
 *  here to represent cached data that should be made available to all users
 *  and pages in the application.</p>
 *
 * <p>An instance of this class will be created for you automatically,
 * the first time your application evaluates a value binding expression
 * or method binding expression that references a managed bean using
 * this class.</p>
 *
 */
public class ApplicationBean extends AbstractApplicationBean {

    @EJB
    private IResourceBrowser resourceBrowser;
    /**
     * Image serveur des DropDownList
     */
    private Option[] zipcode;
    private Option[] country;
    private Option[] roomType;

    public Option[] getCountry() {
        return country;
    }

    public void setCountry(Option[] country) {
        this.country = country;
    }

    public Option[] getZipcode() {
        return zipcode;
    }

    public void setZipcode(Option[] zipcode) {
        this.zipcode = zipcode;
    }
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

    /**
     * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */
    private void _init() throws Exception {
    }
    // </editor-fold>

    /**
     * <p>Construct a new application data bean instance.</p>
     */
    public ApplicationBean() {
    }

    /**
     * <p>This method is called when this bean is initially added to
     * application scope.  Typically, this occurs as a result of evaluating
     * a value binding or method binding expression, which utilizes the
     * managed bean facility to instantiate this bean and store it into
     * application scope.</p>
     * 
     * <p>You may customize this method to initialize and cache application wide
     * data values (such as the lists of valid options for dropdown list
     * components), or to allocate resources that are required for the
     * lifetime of the application.</p>
     */
    @Override
    public void init() {
        // Perform initializations inherited from our superclass
        super.init();
        // Perform application initialization that must complete
        // *before* managed components are initialized
        // TODO - add your own initialiation code here

        // <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
        // Initialize automatically managed components
        // *Note* - this logic should NOT be modified
        try {
            _init();
        } catch (Exception e) {
            log("ApplicationBean1 Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e : new FacesException(e);
        }

        // </editor-fold>
        // Perform application initialization that must complete
        // *after* managed components are initialized
        // TODO - add your own initialization code here
        initializeZipCode();
        initializeCountry();
        initializeRoomType();
    }

    /**
     * <p>This method is called when this bean is removed from
     * application scope.  Typically, this occurs as a result of
     * the application being shut down by its owning container.</p>
     * 
     * <p>You may customize this method to clean up resources allocated
     * during the execution of the <code>init()</code> method, or
     * at any later time during the lifetime of the application.</p>
     */
    @Override
    public void destroy() {
    }

    public Option[] getRoomType() {
        return roomType;
    }

    public void setRoomType(Option[] roomType) {
        this.roomType = roomType;
    }
    
    public void initializeRoomType(){
        ArrayList<RoomType> types = resourceBrowser.getAllRoomType();
        System.out.println("[debug:]Récupération des types de chambre avec 'resourceBrowser.getAllRoomType();' --> " + types.size() + " résultats");
        roomType = new Option[types.size()];
        for(int i = 0; i<types.size(); i++){
            RoomType type = types.get(i);
            Option opt = new Option(type.getId(), type.getType());
            roomType[i] = opt;
        }
        
    }

    public void initializeZipCode() {

        ArrayList<Zipcode> liste = resourceBrowser.getAllZipcode();
        System.out.println("[debug:]Récupération des zipcode avec 'resourceBrowser.getAllZipcode();' --> " + liste.size() + " résultats");
        zipcode = new Option[liste.size()];

        for (int i = 0; i < liste.size(); i++) {
            Zipcode zcde = liste.get(i);
            Option opt = new Option(zcde.getId(), zcde.getZipcode() + " - " + zcde.getCity());
            zipcode[i] = opt;
        }

    }

    public void initializeCountry() {

        ArrayList<Country> liste = resourceBrowser.getAllCountry();
        System.out.println("[debug:]Récupération des country avec 'resourceBrowser.getCountry();' --> " + liste.size() + " résultats");
        country = new Option[liste.size()];

        for (int i = 0; i < liste.size(); i++) {
            Country c = liste.get(i);
            Option opt = new Option(c.getId(), c.getName(),c.getCode());
            country[i] = opt;
        }

    }

    /**
     * <p>Return an appropriate character encoding based on the
     * <code>Locale</code> defined for the current JavaServer Faces
     * view.  If no more suitable encoding can be found, return
     * "UTF-8" as a general purpose default.</p>
     *
     * <p>The default implementation uses the implementation from
     * our superclass, <code>AbstractApplicationBean</code>.</p>
     */
    @Override
    public String getLocaleCharacterEncoding() {
        return super.getLocaleCharacterEncoding();
    }
}
